//
// Created by chen on 25-4-24.
//

#include "led.h"

#include <cstdio>
#include "../pid/PidCotroler.h"

Led &Led::instance() {
    static Led instance; // 只创建一次
    return instance;
}

Led::Led() {
    MX_GPIO_Init();
    //MX_TIM1_Init();
}

void Led::MX_GPIO_Init(void) {
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    /* GPIO Ports Clock Enable */
    __HAL_RCC_GPIOB_CLK_ENABLE();

    /*Configure GPIO pin Output Level */
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);

    /*Configure GPIO pin : PB15 */
    GPIO_InitStruct.Pin = GPIO_PIN_15;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

// 点亮 LED（低电平点亮）
void Led::ledon(void) {
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);
}

// 熄灭 LED（高电平熄灭）
void Led::ledoff(void) {
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);
}

/**
  * @brief This function handles TIM1 update interrupt.
  */
// 全局作用域（文件顶部）
extern  TIM_HandleTypeDef htim3;
extern volatile float angle;
extern volatile float speed;
extern volatile float current_u;
extern volatile float current_v;
#include "../custom/MT6701CT_STD/MT6701CT_STD.h"
// extern "C" void TIM3_IRQHandler(void) {
//     HAL_TIM_IRQHandler(&htim3);
//     static bool flag = false;
//     static int flash_count = 0;       // 闪烁次数计数
//
//     if (flash_count < 100) {
//         flash_count++;
//     }
//     if (flash_count == 100)
//      {         // 只在闪烁次数少于1000时执行
//             flag = !flag;
//             if (flag) {
//                 Led::instance().ledon();
//             } else {
//                 Led::instance().ledoff();
//             }
//
//         printf("u: %f\n", current_u);
//         printf("v: %f\n", current_v);
//
//         printf("angle: %f\n", angle);
//         printf("speed: %f\n", speed);
//         flash_count=0;
//     }
//
// }
